#ifndef COMMON_ICOLLECTION_H
#define COMMON_ICOLLECTION_H

#include <vector>
#include "Common/Collections/IIterator.h"
#include "Common/Collections/IIterable.h"

template<typename T>
class ICollection : public IIterable<T> {
public:
	virtual ~ICollection() {}

	virtual int GetCount() const = 0;

	virtual void Add(T item) = 0;
	virtual void Remove(T item) = 0;
	virtual void Remove( bool (*predicate )( const T& item ) ) = 0;

	virtual void Clear() = 0;
	virtual bool Contains(T item) const = 0;
};

#endif
